<?php


namespace app\back\controller;


use app\back\model\DriverModel;
use app\middleware\BackAuth;
use think\facade\Validate;
use think\Request;
use think\response\Json;
use think\validate\ValidateRule;

/**司机管理
 * Class Driver
 * @package app\back\controller
 */
class Driver
{
    protected $middleware = [BackAuth::class];

    /**添加司机
     * @param Request $request
     * @return Json
     */
    public function addDriver(Request $request)
    {
        // 获取参数
        $input['account'] = $request->post('account');
        $input['repwd'] = $request->post('repwd');
        $input['gender'] = $request->post('gender');
        $input['name'] = $request->post('name');
        $input['pwd'] = $request->post('pwd');
        $input['phone'] = $request->post('phone');
        // 参数校验
        $validate = Validate::rule([
            'name' => function($value) {
                if ($value === null) {
                    return '缺少参数';
                } elseif (mb_strlen($value) < 2 || mb_strlen($value)> 10) {
                    return '名称在 2 到 10 个字符';
                } else {
                    return true;
                }
            },
            'account' => ValidateRule::regex('/^[0-9a-zA-Z]{3,20}$/', '账号3到20位数字，大小写字母组成'),
            'pwd' => ValidateRule::regex('/^[0-9a-zA-Z]{6,12}$/', '密码6到12位数字，大小写字母组成'),
            'repwd' => function($value,$all) {
                if ($value === null) {
                    return '缺少参数';
                } elseif ($value != $all['pwd']) {
                    return '两次输入密码不一致!';
                } else {
                    return true;
                }
            },
            'phone' => ValidateRule::regex('/^1[3456789]\d{9}$/', '请输入正确的手机号!'),
            'gender' => function($value) {
                if ($value === null) {
                    return '缺少参数';
                } elseif (in_array($value, [0,1,2])) {
                    return true;
                } else {
                    return '非法数据';
                }
            }
        ]);

        if (!$validate->check($input)) {
            return jsonFail($validate->getError());
        }
        // 逻辑处理
        return DriverModel::addDriver($input,$request->info);
    }

    /**获取司机列表
     * @param Request $request
     * @return Json
     */
    public function getDriverList(Request $request)
    {
        // 获取参数
        $input['limit'] = $request->post('limit');
        $input['page'] = $request->post('page');
        $input['name'] = $request->post('name');
        $input['status'] = $request->post('status');
        // 参数校验
        $validate = Validate::rule([
            'limit' => ValidateRule::isRequire(null, '缺少参数'),
            'page' => ValidateRule::isRequire(null, '缺少参数'),
            'name' => function($value) {
                return $value === null ? '缺少参数' : true ;
            },
            'status' => function($value) {
                if ($value === null) {
                    return '缺少参数';
                } elseif ($value === '') {
                    return true;
                } elseif ($value == 1 || $value == 2) {
                    return true;
                } else {
                    return '非法数据';
                }
            }
        ]);

        if (!$validate->check($input)) {
            return jsonFail($validate->getError());
        }
        // 逻辑处理
        return DriverModel::getDriverList($input,$request->info);
    }

    /**修改状态
     * @param Request $request
     * @return Json
     */
    public function changeStatus(Request $request)
    {
        // 获取参数
        $input['id'] = $request->post('id');
        $input['status'] = $request->post('status');
        // 参数校验
        $validate = Validate::rule([
            'id' => ValidateRule::isRequire(null, '缺少参数'),
            'status' => function($value) {
                if ($value === null) {
                    return '缺少参数';
                } elseif ($value == 1 || $value == 2) {
                    return true;
                } else {
                    return '非法数据';
                }
            }
        ]);

        if (!$validate->check($input)) {
            return jsonFail($validate->getError());
        }
        // 逻辑处理
        return DriverModel::changeStatus($input,$request->info);
    }

    /**删除司机
     * @param Request $request
     * @return Json
     */
    public function delete(Request $request)
    {
        // 获取参数
        $input['id'] = $request->post('id');
        // 参数校验
        $validate = Validate::rule([
            'id' => ValidateRule::isRequire(null, '缺少参数')
        ]);

        if (!$validate->check($input)) {
            return jsonFail($validate->getError());
        }
        // 逻辑处理
        return DriverModel::delete($input,$request->info);
    }

    /**强制修改司机密码
     * @param Request $request
     * @return Json
     */
    public function forcePwd(Request $request)
    {
        // 获取参数
        $input['pwd'] = $request->post('pwd');
        $input['checkpwd'] = $request->post('checkpwd');
        $input['id'] = $request->post('id');
        // 参数校验
        $validate = Validate::rule([
            'id' => ValidateRule::isRequire(null, '缺少参数'),
            'pwd' => ValidateRule::regex('/^[0-9a-zA-Z]{6,12}$/', '密码6到12位数字，大小写字母组成'),
            'checkpwd' => function($value,$all) {
                if ($value === null) {
                    return '缺少参数';
                } elseif ($value != $all['pwd']) {
                    return '两次输入密码不一致!';
                } else {
                    return true;
                }
            },
        ]);

        if (!$validate->check($input)) {
            return jsonFail($validate->getError());
        }
        // 逻辑处理
        return DriverModel::forcePwd($input,$request->info);
    }

    /**获取单个司机信息
     * @param Request $request
     * @return Json
     */
    public function getOnly(Request $request)
    {
        // 获取参数
        $input['id'] = $request->post('id');
        // 参数校验
        $validate = Validate::rule([
            'id' => ValidateRule::isRequire(null, '缺少参数')
        ]);

        if (!$validate->check($input)) {
            return jsonFail($validate->getError());
        }
        // 逻辑处理
        return DriverModel::getOnly($input,$request->info);
    }

    /**编辑司机信息
     * @param Request $request
     * @return Json
     */
    public function edit(Request $request)
    {
        // 获取参数
        $input['account'] = $request->post('account');
        $input['gender'] = $request->post('gender');
        $input['name'] = $request->post('name');
        $input['phone'] = $request->post('phone');
        $input['id'] = $request->post('id');
        // 参数校验
        $validate = Validate::rule([
            'name' => function($value) {
                if ($value === null) {
                    return '缺少参数';
                } elseif (mb_strlen($value) < 2 || mb_strlen($value)> 10) {
                    return '名称在 2 到 10 个字符';
                } else {
                    return true;
                }
            },
            'account' => ValidateRule::regex('/^[0-9a-zA-Z]{3,20}$/', '账号3到20位数字，大小写字母组成'),
            'phone' => ValidateRule::regex('/^1[3456789]\d{9}$/', '请输入正确的手机号!'),
            'gender' => function($value) {
                if ($value === null) {
                    return '缺少参数';
                } elseif (in_array($value, [0,1,2])) {
                    return true;
                } else {
                    return '非法数据';
                }
            },
            'id' => ValidateRule::isRequire(null, '缺少参数')
        ]);

        if (!$validate->check($input)) {
            return jsonFail($validate->getError());
        }
        // 逻辑处理
        return DriverModel::edit($input,$request->info);
    }

    /**获取司机运输路线
     * @param Request $request
     * @return Json
     */
    public function getRoute(Request $request)
    {
        // 获取参数
        $input['id'] = $request->post('id');
        // 参数校验
        $validate = Validate::rule([
            'id' => ValidateRule::isRequire(null, '缺少参数')
        ]);

        if (!$validate->check($input)) {
            return jsonFail($validate->getError());
        }
        // 逻辑处理
        return DriverModel::getRoute($input,$request->info);
    }

    /**编辑司机运输路线
     * @param Request $request
     * @return Json
     */
    public function editRoute(Request $request)
    {
        // 获取参数
        $input['id'] = $request->post('id');
        $input['route_ids'] = $request->post('route_ids');
        $input['old_route_ids'] = $request->post('old_route_ids');
        // 参数校验
        $validate = Validate::rule([
            'id' => ValidateRule::isRequire(null, '缺少参数'),
            'route_ids' => ValidateRule::isRequire(null, '缺少参数'),
            'old_route_ids' => function($value,$all) {
                if ($value === null) {
                    return '缺少参数';
                } elseif ($value == $all['route_ids']) {
                    return '路线未更改无法提交';
                } else {
                    return true;
                }
            },
        ]);

        if (!$validate->check($input)) {
            return jsonFail($validate->getError());
        }
        // 逻辑处理
        return DriverModel::editRoute($input,$request->info);
    }
}